软件应用 | STATA避雷小贴士(第二期)
STATA是经济类学生几乎绕不开的计量分析软件,其体积小巧、功能强大、计量分析专业准确,上手难度也较低。然而STATA看似简单,却也有很多需要依赖经验才能避开的问题,这些问题即使是STATA老鸟也未必能完全避开,新手更是可能要不断摸索试错才能弄清楚其中的机制,因此我们决定从今天开始不定期分享STATA那些可能有点违背常识和直觉、或者新手极易疏忽混淆的问题。
问题触发需要机缘、经验积累需要时间,因此我们将在内容积累到一定分量以后才汇总成单独的一期并分享,希望读者们持续关注我们的公众号。下面就是我们第二期小贴士的内容:
09
STATA中使用命令直接保存文件时,如果保存的目标文件夹不存在,则文件无法被保存,请事先手动创建文件夹。
10
STATA的数值型变量在数据输出成EXCEL或者CSV文件时可能会出现莫名其妙的误差,相比原始数据±0.0000001(具体的位数不确定),虽然由于误差极小往往不会影响运算,但仍是隐患,可尝试将所有变量均转成字符型变量后再输出(偶尔会失效),命令为:tostring _all,replace
11
STATA的merge命令无法完成多对多的匹配,即merge m:m通常是无效的,可替换成joinby命令完成多对多的匹配;除此以外,计算笛卡尔积时也可以使用joinby命令:只需要在两个数据集均创建一个对所有观测均相同的同名同数值变量,并以此变量连接即可。
12
使用reshape命令将宽表数据转换为长表数据时,要求被转换的变量均以相同的字符串打头,如果没有的话,可自行添加。
如图所示,目前有一份面板数据,年份和各个地区各自成一列,如果想转换成长表,目前的全国、江苏、浙江等地区无法满足reshape命令的要求,需要给这些变量加统一的前缀。
(1)列出需要修改的变量,批量循环处理:
//批量修改指定变量名称
//将需要修改的变量名称指定给暂元varlist,不同的变量名称之间用空格隔开
local varlist="全国 江苏 浙江 山东 广东 广西 四川 重庆 云南 陕西 安徽 河南 江西 湖北 湖南 山西 甘肃 新疆 贵州 宁夏 河北 海南"
//利用for循环读取暂元varlist中的每一个单独的值
foreach var in `varlist'{
local x="i"+"`var'"
//新建一个暂元x,该暂元表示新的变量名,即原来的变量名称前加上一个i
rename `var' `x'
//重命名变量,即将原来的变量重命名成新的变量名
}
(2)列出不需要修改的变量,读取全部变量,判断是否在排除列表中,如果不在,则进行处理:
//列出需要排除的变量,读取所有变量并排除不需要修改名称的变量后,批量循环处理
local excluded="年份"
//如上图所示,所有变量中只有"年份"变量不需要更名,将其存储在暂元excluded
ds
//固定命令,获取目前数据的所有变量
foreach var in `r(varlist)'{
local tag="1"
//对每一个变量,暂时设置一个标记暂元tag,用来存储其是否需要更名的状态
foreach j in `excluded'{
if "`var'"=="`j'"{
//依次判断当前的变量是否在排除列表内
local tag="0"
continue
//如果在排除列表内,则将标记改为0,并跳出循环、不再与排除列表内的其他变量比较以判断是否在排除列表内
}
}
if "`tag'"=="1"{
//如果该变量需要更名,则更名
local x="i"+"`var'"
rename `var' `x'
}
}
按照上述代码执行后,则数据如下图所示,可以使用reshape命令。
13
在使用reshape命令将宽表数据转换为长表数据时,如果是用字符而非数字区分不同变量的,则可能弹出“variable XXXXX contains all missing values”的提示,这个“全部为缺失值”的提示具有误导性,解决方法为在命令后添加string选项。
添加string选项后即可解决,成功转换后如图所示。
更多同系列内容请点击👇
软件应用 | 不摔不知道的坑!这几个STATA误区你中了几个?
——The End——
后期将会不定时更新~
关注我们,及时获取最新资讯!
星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文 | 石总
欢迎扫描👇二维码添加关注